package com.yfp.operation.service;


import com.yfp.common.core.domain.R;
import com.yfp.common.core.web.page.TableDataInfo;
import com.yfp.operation.domain.Client;
import com.yfp.operation.domain.ClientBill;
import com.yfp.operation.domain.dto.*;
import com.yfp.operation.domain.vo.StoredBillVO;
import com.yfp.operation.domain.OrderComboDO;
import com.yfp.operation.domain.dto.MarCouponPackReceiveUserReqDTO;
import com.yfp.operation.domain.dto.UserLayerTotalUserDTO;
import com.yfp.operation.enums.UserLabelEnums;
import com.yfp.operation.domain.dto.*;

import java.util.List;

/**
 * @Description: 客户Service
 *
 * @CreateDate: 2024/5/16 9:58
 * @UpdateUser:
 * @UpdateDate: 2024/5/16 9:58
 * @UpdateRemark: 暂无修改
 * @Version: 1.0
 */
public interface ClientService {
    /**
     * 查询列表
     *
     * @param client
     * @return
     */
    List<Client> findList(Client client);

    /**
     * 编辑信息
     *
     * @param client
     */
    void edit(Client client);

    /**
     * 根据用户id查询客户信息
     *
     * @param userId
     * @return
     */
    Client getByUserId(String userId);

    /**
     * 根据礼包id查询客户信息
     *
     * @param receiveUserReqDTO 礼包id
     * @return
     */
    List<Client> listByReceiveUserReq(MarCouponPackReceiveUserReqDTO receiveUserReqDTO);

    List<Client> listByUserLayerTotalUserDTO(UserLayerTotalUserDTO userLayerDTO, List<String> userMobiles);

    void clientLabel();

    UserLabelEnums calculateClientLabel(String key, List<OrderComboDO> value);

    List<Client> client2VO(List<Client> list);

    List<Client> listByUserIds(List<String> notifyCouponArriveReminderList);

    /**
     * 储值余额管理
     * @param surplusFundingDTO
     * @return
     */
    List<StoredBillVO> surplusFunding(SurplusFundingDTO surplusFundingDTO);

    /**
     * 储值记录
     * @param storedBillDTO
     * @return
     */
    List<StoredBillVO> storedBill(StoredBillDTO storedBillDTO);

    /**
     * 余额变动明细
     * @param clientBillsDTO
     * @return
     */
    List<ClientBill> clientBills(ClientBillsDTO clientBillsDTO);

    /**
     * 数据补全
     * @param storedBillVOS
     * @return
     */
    List<StoredBillVO> storedBillComplement(List<StoredBillVO> storedBillVOS);

    /**
     * 储值退款
     * @param storedRefundDTO
     */
    R<?> refund(StoredRefundDTO storedRefundDTO);

    /**
     * 给进社群的新客户打点位标签
     */
    void newClientPositionLabel();

    /**
     * 修改客户点位标签
     * @param orderId
     */
    void updatePositionId(String orderId);
}
